using System;
using System.Collections.Generic;
using System.Xml;
using System.Collections.ObjectModel;

namespace planning
{
	public abstract class Enseignement : ObservableObject
	{
		// ----- ATTRIBUTS -----
		private NumeroGroupe groupe;
		private ICollection<Horaire> horaires = new ObservableCollection<Horaire>();
		private Matiere matiere;
		private Enseignant enseignant;
		private Salle salle;

		// ----- CONSTRUCTEURS -----
		public Enseignement()
		{
			// Start of user code for default constructor
			// End of user code for default constructor
		}

		// ----- ACCESSEURS -----
		public NumeroGroupe Groupe
		{
			get { return groupe; }
			set { groupe = value; ObjectChanged("groupe"); }
		}

		public ICollection<Horaire> Horaires
		{
			get { return horaires; }
			set { horaires = value; ObjectChanged("horaires"); }
		}

		public Matiere Matiere
		{
			get { return matiere; }
			set { matiere = value; ObjectChanged("matiere"); }
		}

		public Enseignant Enseignant
		{
			get { return enseignant; }
			set { enseignant = value; ObjectChanged("enseignant"); }
		}

		public Salle Salle
		{
			get { return salle; }
			set { salle = value; ObjectChanged("salle"); }
		}


		private static Dictionary<string, Enseignement> references = new Dictionary<string, Enseignement>();

		public static Enseignement fromXml(XmlNode node)
		{

			Type elementType = Type.GetType("planning." + node.Name);
			if(!typeof(Enseignement).IsAssignableFrom(elementType))
				throw new InvalidOperationException();

			Enseignement enseignement = (Enseignement) elementType.GetMethod("fromXml").Invoke(null, new object[] { node });
			return enseignement;
		}

		public virtual XmlElement toXml(XmlDocument document)
		{
			// Start of user code for toXml
			// End of user code for toXml
		}


	}

}
